import { Request, Response } from 'express';
import { dictionaryService } from './service';
import { RedisService } from '../../sdk/redis/RedisService';

// 创建 Redis 服务实例
const redisService = new RedisService();
// 缓存前缀
const DICT_CACHE_PREFIX = 'dict:';
// 缓存时间 5 分钟（300秒）
const CACHE_EXPIRE_TIME = 300;

/**
 * 获取字典数据
 */
export const getDictionary = async (req: Request, res: Response) => {
  try {
    const { type } = req.params;

    if (!type) {
      return res.json({
        success: false,
        message: '字典类型不能为空'
      });
    }

    let dictData;

    // 如果是 SYSTEM_STATUS 类型，尝试从缓存获取
    if (type === 'SYSTEM_STATUS') {
      // 构建缓存键
      const cacheKey = `${DICT_CACHE_PREFIX}${type}`;
      
      // 尝试从缓存获取数据
      const cachedData = await redisService.get(cacheKey);
      
      if (cachedData) {
        // 如果缓存存在，解析并返回
        dictData = JSON.parse(cachedData);
      } else {
        // 如果缓存不存在，从数据库获取
        dictData = await dictionaryService.findByType(type);
        
        // 将数据存入缓存，设置过期时间为 5 分钟
        await redisService.setex(cacheKey, CACHE_EXPIRE_TIME, JSON.stringify(dictData));
      }
    } else {
      // 其他类型的字典数据直接从数据库获取
      dictData = await dictionaryService.findByType(type);
    }

    res.json({
      success: true,
      data: dictData
    });
  } catch (error: any) {
    res.json({
      success: false,
      message: error.message || '获取字典数据失败'
    });
  }
};